#include <iostream>


// int add(int x,int y)
// {
//     return x + y;
// }
// double add(double x,double y)
// {
//     return x + y;
// }
// char add(char x,char y)
// {
//     return x + y;
// }

// int main()
// {
//     std::cout << add(4,5) << std::endl;
//     std::cout << add(1.2,3.4) << std::endl;
//     std::cout << add('a','b') << std::endl;
//     return 0;
// }



// 重载
// class A
// {
//     void fun(){}
//     void fun(int a){}
//     void fun(double b){}
// };


// 重写
// class A
// {
// public:
//     virtual void fun()
//     {
//         std::cout << "A" << std::endl;
//     }
// };

// class B : public A
// {
// public:
//     virtual void fun()
//     {
//         std::cout << "B" << std::endl;
//     }
// };
// int main()
// {
//     A* a = new B();
//     a->fun();
//     A* c = new A();
//     c->fun();
//     return 0;
// }



// void Test(int a,int *b,int &c)
// {
//     a += 1;
//     (*b) += 1;
//     c += 1;
//     printf("a = %d,b = %d,c = %d\n",a,*b,c);
// }

// int main()
// {
//     int i = 1;
//     int a = 1;
//     int *j = &a;
//     int k = 1;
//     Test(i,j,k);
//     printf("i = %d,j = %d,k = %d\n",i,*j,k);


//     return 0;
// }


// int main()
// {
//     int *p = nullptr;
//     printf("%p\n",p);
//     return 0;
// }

// //函数指针示例
// int add (int x,int y)
// {
//     return x + y;
// }

// int (*fun)(int x,int y);

// int main()
// {
//     fun = add;
//     std::cout << (*fun)(1,2) << std::endl;
//     return 0;
// }



// 指针函数
// typedef struct _Data
// {
//     int a;
//     int b;
// }Data;

// Data* f(int a,int b)
// {
//     Data* data = new Data;
//     //....
//     data->a = a;
//     data->b = b;
//     return data;
// }

// int main()
// {
//     //调用指针函数
//     Data *MyData = f(1,2);
//     printf("%d %d\n",MyData->a,MyData->b);
//     return 0;
// }

// int main()
// {
//     int i = 0;
//     int* p1 = &(++i);
//     //int* p2 = &(i++);
//     std::cout << *p1 << std::endl;
//     // i++ = 1;
//     ++i = 10;
//     std::cout << *p1 << std::endl;
//     return 0;
// }


// int myDiv(int x, int y)
// {
// 	return x / y;
// }

// inline void e()
// {
// 	printf("hello world");
// }

// int main()
// {
// 	printf("%d\n",myDiv(6, 0));
// 	return 0;
// }


//class animal
//{
//public:
//	void sleep()
//	{
//		std::cout << "animal sleep" << std::endl;
//	}
//	void breathe()
//	{
//		std::cout << "animal breathe" << std::endl;
//	}
//};
//
//class fish : public animal
//{
//public:
//	void breathe()
//	{
//		std::cout << "fish bubble" << std::endl;
//	}
//};
//extern int gValue;
//int main()
//{
//	animal *pAn = nullptr;
//	pAn->breathe();
//	fish* pFish = nullptr;
//	pFish->breathe();
//	printf("%d\n", gValue);
//	return 0;
//}



//class MyClass
//{
//public:
//	int classVar = 30; // 类作用域(静态成员)
//	void printVar()
//	{
//		std::cout << classVar << std::endl;
//	}
//};
//// int MyClass::classVar = 30;
//
//int main()
//{
//	MyClass obj;
//	obj.printVar();
//	std::cout << obj.classVar << std::endl;
//	
//	obj.classVar = 100;
//
//	MyClass obj2;
//	obj2.printVar();
//	std::cout << obj2.classVar << std::endl;
//
//	return 0;
//}

//int main()
//{
//	int a[3][4] = { {1,2,3,4},{2,3,4,5},{3,4,5,6}};
//	for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
//	{
//		for (int j = 0; j < sizeof(a[0]) / sizeof(a[0][0]); j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//	int(*p)[4];
//	p = a;
//	printf("%d\n", sizeof(*p) / sizeof((*p)[0]));
//	for (int i = 0; i < sizeof(*p) / sizeof((*p)[0]); i++)
//	{
//		printf("%d ",(* p)[i]);
//	}
//	p++;
//	for (int i = 0; i < sizeof(*p) / sizeof(*p[0]); i++)
//	{
//		printf("%d ", (*p)[i]);
//	}
//	return 0;
//}


//extern int a;
//int main()
//{
//	while (1)
//	{
//		static int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//		for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
//		{
//			printf("%d ", arr[i]);
//		}
//	}
//	hello_from_c();
//	std::cout << a << std::endl;
//	return 0;
//}

